#pragma once
#include <string>
#include <set>
#include <map>
#include <mutex>
#include <memory>
using namespace std;

//配置文件类
class Configuration{
public:
    ~Configuration();
    //获取静态单例对象
    static Configuration *getInstance(const string &filepath);
    //获取存放配置文件内容的map
    map<string, string> &getConfigMap();
    //根据配置名找到对应内容
    string parseConfig(const string &label);
    //获取停用词词集
    set<string> &getStopWordList();
    //打印配置文件
    void printConfigMap();
    //打印停用词词集
    void printStopWordList();
    Configuration(const Configuration&) = delete;
    Configuration& operator=(const Configuration&) = delete;
private:
    Configuration(const string &filepath);
    static void initConfiguration(const string &filepath);
private:
    static unique_ptr<Configuration> instance; //静态单例对象
    static once_flag initConfigurationFlag; //初始化的标志
    string _filepath; //配置文件路径
    map<string, string> _configMap; //配置文件内容
    set<string> _stopWordList; //停用词词集
};

